#include "sys.h"
#include "app.h"
#include "gpio.h"
#include "usart.h"
#include "string.h"

void FLASH_Config(void)
{
	FLASH_OBProgramInitTypeDef OBInitCfg;
	if(READ_BIT(FLASH->OPTR, FLASH_OPTR_NRST_MODE) == 0)//复位输入
	{
		
		HAL_FLASH_Unlock(); /* 解锁 FLASH */
		HAL_FLASH_OB_Unlock(); /* 解锁 FLASH OPTION */
		
		OBInitCfg.USERType = OB_USER_BOR_EN | OB_USER_BOR_LEV | OB_USER_IWDG_SW | OB_USER_NRST_MODE | OB_USER_nBOOT1;
		/* BOR 不使能/BOR 上升 3.2,下降 3.1/软件模式看门狗/RST 改为 GPIO/System memory 作为启动区 */
		OBInitCfg.USERConfig =OB_BOR_DISABLE | OB_BOR_LEVEL_3p1_3p2 | OB_IWDG_SW | OB_RESET_MODE_GPIO | OB_BOOT1_SYSTEM;
		
//		OBInitCfg.RDPLevel =OB_RDP_LEVEL_1;//使能读保护
		/* 启动 option byte 编程 */
		HAL_FLASH_OBProgram(&OBInitCfg);
		HAL_FLASH_Lock(); /* 锁定 FLASH */
		HAL_FLASH_OB_Lock(); /* 锁定 FLASH OPTION */
		
		/* 产生一个复位， option byte 装载 */
		HAL_FLASH_OB_Launch();
	}
}

/**
  * @brief  应用程序入口函数.
  * @retval int
  */
int main(void)
{
//	uint8_t num1 = 1,num2 = 8,n1 = 8,n2 = 8,n3 = 8,n4 = 8;//数码管显示
	uint32_t currentTick = 0,lastTick = 0;
	uint32_t currentTick1 = 0,lastTick1 = 0;
	uint32_t currentTick2 = 0,lastTick2 = 0;
  /* 初始化所有外设，Flash接口，SysTick */
  HAL_Init();

  /* 系统时钟配置 */
  APP_SystemClockConfig(); 
//	FLASH_Config();
	//串口初始化
	usart_init();
	
	//tm1652的SDA初始化
	tm1652_GPIO_Init();


	
	do
	{
		HAL_Delay(50);
		LED_Show(10,10,10,10,10,10);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_13,GPIO_PIN_RESET);
			HAL_Delay(50);
		LED_Show(8,8,8,8,8,8);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_13,GPIO_PIN_RESET);
	}while(0);
	

		HAL_Delay(1000);
	LED_Show(0,0,0,0,0,0);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_13,GPIO_PIN_RESET);
	//软件协议不同
//	while(!Connect_Init())
//	{
//		HAL_Delay(1000);
//	}

	
	
  while (1)
  {
		currentTick = HAL_GetTick();
		TempeData_Get();
				//软件协议不同
//		if(conncet_res == 1)
//		{
//			currentTick2 = HAL_GetTick();
//			if(currentTick2 - lastTick2 > 2000)
//			{
//				HAL_Delay(200);
//				num1 = 0;
//				num2 = 0;
//				n1 = 0;
//				n2 = 0;
//				n3 = 0;
//				n4 = 0;
//				LED_Show(num1,num2,n1,n2,n3,n4);
//				HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
//				HAL_GPIO_WritePin(GPIOA,GPIO_PIN_13,GPIO_PIN_RESET);
//				lastTick2 = currentTick2;
//			}
//		}
//		if(conncet_res == 0)lastTick2 = currentTick2;
		if(currentTick - lastTick > 600)
		{
			LED_Show(num1,num2,n1,n2,n3,n4);
			lastTick = currentTick;
		}
		if(switch_t == 1 && select_num == 2)
		{
			currentTick1 = HAL_GetTick();
			if(currentTick1 - lastTick1 > (1000*switch_time))
			{
				flag_switch = !flag_switch;
				lastTick1 = currentTick1;
			}
		}

		
//		if(num1 > 9)num1 = 0;
//		if(n1 > 9)n1 = 0;
//		if(num2 > 9)num2 = 0;
//		if(n2 > 9)n2 = 0;
//		if(n3 > 9)n3 = 0;
//		if(n4 > 9)n4 = 0;
//		LED_Show(num1++,num2++,n1++,n2++,n3++,n4++);
//		HAL_Delay(3000);
//		
	}
}




#ifdef  USE_FULL_ASSERT
/**
  * @brief  输出产生断言错误的源文件名及行号
  * @param  file：源文件名指针
  * @param  line：发生断言错误的行号
  * @retval 无
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* 用户可以根据需要添加自己的打印信息,
     例如: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* 无限循环 */
  while (1)
  {
  }
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT Puya *****END OF FILE****/
